"""
    随机生成5个学生的信息，包含：学号，姓名，性别，班级，成绩明细
    具体要求：
        1.学号：95001...95005
        2.姓名：随机生成5个
        3.性别：随机选择男或女
        4.班级：填写固定的（初三（4）班）
        5.成绩明细：有5门课程，分别是（语文，数学，英语，物理，化学），分数在50-100之间随机生成,同一个学生的5门成绩不重复
        最后的结果：
            【
            {'sno': 95001,'name': '王朝','gender': '男','class': '初三（4）班','result': [68,74,58,95,89]},
            {'sno': 95002,'name': '马汉','gender': '男','class': '初三（4）班','result': [88,78,58,94,88]}
            】
"""
import random

# 定义全局变量
NAMES = ['王朝', '马汉', '王武', '赵六', '宾炬维']
GENDER = ['男', '女']
CLASS = '初三(4)班'
INFOS = ['sno', 'name', 'gender', 'class', 'result']


def get_random_numbers(start, end, number: int):
    """
    获取某一个范围内指定数量的不重复随机数
    :param start: 范围的开始值
    :param end: 范围的结束值
    :param number: 数量
    :return: 返回List集合
    """
    # 定义一个set集合，用来存储返回的集合
    results = set()
    # 开始循环
    while len(results) < number:
        # 生成一个随机数
        results.add(random.randint(start, end))
    # 返回集合
    return list(results)  # 将set集合转换成list集合


def get_one_student_result(order: int, name: str):
    """
    生成一个学生的成绩明细
    :param order: 学号
    :param name: 学生姓名
    :return: 返回一个学生的成绩明细（dict）
    """
    # 根据list初始化一个dict
    one_student_dict = {}.fromkeys(INFOS)

    # 添加学号
    if len(str(order)) == 1:
        one_student_dict['sno'] = '9500' + str(order)
    elif len(str(order)) == 2:
        one_student_dict['sno'] = '950' + str(order)
    elif len(str(order)) == 3:
        one_student_dict['sno'] = '95' + str(order)
    else:
        print("只支持生成1-1000个学生的成绩")
    # 添加姓名
    one_student_dict['name'] = name
    # 添加性别
    one_student_dict['gender'] = GENDER[random.randint(0, len(GENDER) - 1)]
    # 添加班级
    one_student_dict['class'] = '初三(4)班'
    # 添加成绩
    one_student_dict['result'] = get_random_numbers(50, 100, 5)

    # 返回
    return one_student_dict


def get_class_student():
    """
    获取一个班级的学生成绩
    :return: 返回全部的学生成绩
    """
    # 定义一个list存储整个班级的学生成绩
    all_students_result = []
    # 遍历
    for index, val in enumerate(NAMES):
        all_students_result.append(get_one_student_result(index + 1, val))

    # 返回
    return all_students_result


if __name__ == '__main__':
    # 获取一个班级的学生成绩
    results = get_class_student()
    # 打印
    for one in results:
        print(one)
